<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:db="http://docbook.org/ns/docbook">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta http-equiv="Content-Style-Type" content="text/css" />
    <title>Zpráva o podílu na projektu</title>
  </head>
  <body>
        <h1>Zpráva o podílu na projektu</h1>
        <h2>Roman Lacko </h2>
    
        <h3>Zpracování příkazového řádku (třída Main)</h3>
        <p>
            Mým úkolem bylo navrhnout a implementovat uživatelské rozhraní programu.
            Interakce s programem měla umožnit uživateli zvolit, kam se mají ukládat vytvořené třídy,
            jméno balíku tříd a specifikace vlastní typové mapy (viz. <b>Mapování typů</b>). Také bylo zapotřebí vyřešit
            kolize, které mohly vzniknout při zpracování více schémat zadaných najednou.
        </p>
        
            <h3>Volby programu.</h3>
            <p>
                Požadované funkce jsem implementoval pomocí voleb tak, jak je známo z běžných terminálových aplikací.
                Jednotlivé volby programu a jejich funkce jsou rozepsány v dokumentaci programu nebo v nápověde (získate volbou
                <span style="font-family:monospace">--help</span>). Program umožňuje každou volbu specifikovat nejvíce jednou a očekává volby <b>před</b>
                seznamem souborů.
            </p>
        
        
            <h3>Řešení kolizí</h3>
            <p>
                Pokud uživatel zadá jen jedno schéma ke zpracování, pak program vygeneruje parser v souboru <span style="font-family:monospace">Parser.java</span> (nelze ovlivnit).
                Pokud však uživatel zadá více schémat, pak je samozřejmě nutno vygenerovat několik parserů (z každého schématu). To jsem vyřešil tak,
                že ze jména souboru se vybere první souvislý řetězec znaků oddělený tečkou, převede se na PascalCase (také známo jako
                UpperCamelCase) a přidá se řetězec <span style="font-family:monospace">Parser</span>, např. <span style="font-family:monospace">foo.xsd</span> → <span style="font-family:monospace">FooParser.java</span>. 
                Pokud už parser se stejným jménem existuje, kolize se neřeší, program pouze vypíše varování.
            </p>
        
    
        <h3>Mapování typů</h3>
        <p>
            Cílem této části bylo vymyslet, jak abstrahovat od konkrétních překladů XSD datových typů na Java třídy tak, 
            aby bylo možné jednoduše modifikovat způsob překladu. 
            K tomu slouží třída <span style="font-family:monospace">TypeConverter</span> a tzv. <b>Typové mapy</b>.
        </p>
        
            <h3>TypeConverter</h3>
            <p>
                Třída odpovědná za validaci typové mapy a předklad XSD typů (na vstupu jako <span style="font-family:monospace">String</span>) na instance
                tříd implementující rozhraní <span style="font-family:monospace">SimpleType</span>. K validaci jsem vytvořil XML Schema (<span style="font-family:monospace">typemap.xsd</span>),
                proti kterému se všechny typové mapy kontrolují. Toto schéma nelze (ze zřejmých důvodů) z rozhraní příkazové řádky nijak modifikovat.
                Také jsem vytvořil výchozí typovou mapu (<span style="font-family:monospace">typemap.xml</span>), která je zabudována přímo v programu a překládá většinu
                běžných XSD typů. Pokud některý typ nelze přeložit (nemá záznam v mapě), implementoval jsem defaultní typ jako <span style="font-family:monospace">String</span>.
            </p>
        
        
            <h3>Typové mapy</h3>
            <p>
                Typové mapy jsou XML soubory, které mají strukturu analogickou ke slovníku. 
                Přesný popis formátu souboru je k dispozici jako XML Schema v repozitáři projektu nebo jako
                článek na wiki projektu (<b>Type mapping</b>, v angličtině).
                Samotné načtení a validace typové mapy probíha před parsováním vstupních souborů. Pokud selže validace, program skončí s chybou.
            </p>
        
    
        <h3>Původní návrh hlavní metody parseru</h3>
        <p>
            Mým úkolem bylo také navrhnou původní hlavní metodu generovaného parseru. Původní metoda už částečne podporovala validaci, nicméně
            poté byla dále upravována a rozšiřována jinými řešiteli projektu.
        </p>
    </body>
</html>
